#include "HardwareProfile.h"

void HT162X_Setting(unsigned char x)
{
	unsigned char i;
	HT162X_DATA_DIR=0;
	HT162X_WR=0;
	HT162X_CS=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(1);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(1);
	HT162X_DATA=0;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(10);
	HT162X_DATA=0;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	for(i=0; i<9; i++) 
	{   
		HT162X_WR=0;
		if((x & 0x80)==0x80) 
			HT162X_DATA=1; 
		else 
			HT162X_DATA=0; 
		__delay_us(10);
		HT162X_WR=1;
		__delay_us(10);		
		x=x<<1; 
	}  
	HT162X_CS=1;
	HT162X_WR=1;
	HT162X_RD=1;
}
void HT162X_WriteData(unsigned char a,unsigned char d)
{
	unsigned char i;
	HT162X_DATA_DIR=0;
	HT162X_WR=0;
	HT162X_CS=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(10);
	HT162X_DATA=0;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	a=a<<2;
	for(i=0; i<6; i++) 
	{   
		HT162X_WR=0;
		if((a & 0x80)==0x80) 
			HT162X_DATA=1; 
		else 
			HT162X_DATA=0; 
		__delay_us(10);
		HT162X_WR=1;
		__delay_us(10);		
		a=a<<1; 
	}  
	for(i=0; i<4; i++) 
	{   
		HT162X_WR=0;
		if((d & 0x01)==0x01) 
			HT162X_DATA=1; 
		else 
			HT162X_DATA=0; 
		__delay_us(10);
		HT162X_WR=1;
		__delay_us(10);		
		d=d>>1; 
	}
	HT162X_CS=1;
	HT162X_WR=1;
	HT162X_RD=1;
}


void HT162X_WriteDatas(unsigned char a,const unsigned char* d,unsigned char count)
{
	unsigned char i,j,x;
	HT162X_DATA_DIR=0;
	HT162X_WR=0;
	HT162X_CS=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(1);
	HT162X_WR=1;
	__delay_us(1);
	HT162X_WR=0;
	__delay_us(1);
	HT162X_DATA=0;
	__delay_us(1);
	HT162X_WR=1;
	__delay_us(1);
	HT162X_WR=0;
	__delay_us(1);
	HT162X_DATA=1;
	__delay_us(1);
	HT162X_WR=1;
	__delay_us(1);
	HT162X_WR=0;
	a=a<<2;
	for(i=0; i<6; i++) 
	{   
		HT162X_WR=0;
		if((a & 0x80)==0x80) 
			HT162X_DATA=1; 
		else 
			HT162X_DATA=0; 
		__delay_us(1);
		HT162X_WR=1;
		__delay_us(1);		
		a<<=1; 
	}  
	for(i=0; i<count; i++) 
	{   
		x=*d;
		for(j=0;j<4;j++)
		{
			HT162X_WR=0;
			if((x & 0x01)==0x01) 
				HT162X_DATA=1; 
			else 
				HT162X_DATA=0; 
			__delay_us(1);
			HT162X_WR=1;
			__delay_us(1);			
			x>>=1; 
		}
		d++;
	}  
	HT162X_CS=1;
	HT162X_WR=1;
	HT162X_RD=1;
}

unsigned char HT162X_ReadData(unsigned char a)
{
	unsigned char i,x;
	HT162X_DATA_DIR=0;
	HT162X_WR=0;
	HT162X_CS=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(10);
	HT162X_DATA=1;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	__delay_us(10);
	HT162X_DATA=0;
	__delay_us(10);
	HT162X_WR=1;
	__delay_us(10);
	HT162X_WR=0;
	a=a<<2;
	for(i=0; i<6; i++) 
	{   
		HT162X_WR=0;
		if((a & 0x80)==0x80) 
			HT162X_DATA=1; 
		else 
			HT162X_DATA=0; 
		__delay_us(10);
		HT162X_WR=1;
		__delay_us(10);		
		a=a<<1; 
	}
	x=0;
	HT162X_DATA_DIR=1;
	HT162X_RD=0;
	for(i=0; i<4; i++) 
	{
		x>>=1;
		HT162X_RD=0;
		__delay_us(10);
		HT162X_RD=1;
		__delay_us(10);
		if (HT162X_DATA==1)
		{
			x|=0x08;
		} 
		else
		{
			x&=0x07;
		}
		__delay_us(10);		
	}
	HT162X_CS=1;
	HT162X_WR=1;
	HT162X_RD=1;
	return x;
}

void HT162X_Init( void )
{
	HT162X_CS=1;
	HT162X_WR=1;	
	HT162X_RD=1;
}

